#通用的实验数据:imbalance
#注意：使用该代码的时候，电脑禁止运行wegame等腾讯有关的软件，如果使用，可能会照成鼠标不按照程序指令来运行（因为腾讯安全中心监控脚本）

import time
import pyautogui
import win32com.client
import json
import pyautogui as pag
pyautogui.PAUSE = 0.01  # 暂停的时间
pyautogui.FAILSAFE = True  # 自启动故   1
#代码需要修改的地方
# 点击运行的xy

num_x = 570
num_y = 222
run_x = 372
run_y = 67

det_x=976
det_y=236
#意外情况时点击的坐标
ls_x = 432
ls_y = 148

def GetProcess(process_name):
    is_exist = False
    wmi = win32com.client.GetObject('winmgmts:')
    processCodeCov = wmi.ExecQuery('select * from Win32_Process where name=\"%s\"' %(process_name))
    if len(processCodeCov) > 0:
        is_exist = True
    return is_exist
                                       
def data_detail(file):                    
    #f = open('data_detail_1120_晚上_acc.json', 'r')#读取文件
    #f = open('标准化-gm-1122.json', 'r')#读取文件data_detail_1115_stander_f1
    f = open(file, 'r')
    a = f.read()
    dict_hi = eval(a)
    f.close()
    return dict_hi
#获得dir数据集的详细信息
def ret_dir_det(data_det,dir):
    zly_c = data_det["{}".format(dir)]["C"]
    # zly_wei = data_det["{}".format(dir)]["IR"]
    zly_wei = 1
    zly_gamm = data_det["{}".format(dir)]["gamma"]
    # zly_gamm = 1
    zly_rang=data_det["{}".format(dir)]["rang"]
    return zly_c,zly_wei,zly_gamm,zly_rang
def print_cwg(c,w,g,other =0):#代码暂时还没有写

    pyautogui.moveTo(det_x, det_y, duration=0.25)  # 移动鼠标到具体坐标，duration为所需的时间
    pyautogui.click()
    for i in range(65):  # 删除原来weight的值
        pyautogui.press('backspace')
    need_print="tC = {};tGamma={};tweight0={};tPostWeight={};".format(c,g,w,other)
    if len(need_print)<65:need_print+=" "*(65-len(need_print))
    pyautogui.typewrite(need_print)
#判断j1是否出现
def j1_exist():
    while True:
        flag = GetProcess('j1.exe')
        if not flag:  # 如果进程没有出现，我们就等待进程
            time.sleep(0.01)  # 停顿0.1秒，每过0.1秒检查一下进程是否出现
        if flag:
            print("j1.exe appear")
            break#如果进程出现，退出循环
    time.sleep(0.2)  # 停顿0.5秒

#判断是否存在j1进程
def isexistj1():
    while True:
        flag = GetProcess('j1.exe')
        if not flag:  # 如果进程结束了，退出循环
            print("jl.exe end")
            break
        time.sleep(0.01)
    time.sleep(0.2)  # 停顿2秒
# 判断鼠标的位置是否一致
def mouse(x,y):
    x_pag,y_pag = pag.position()
    if (x_pag,y_pag) == (x,y):
        return True
    else:
        return False
if __name__ == '__main__':
    time.sleep(5)
    
    for num_run in [0.1,0.2,0.3,0.4,0.5]:
        isexistj1()#判断j1
        data_det=data_detail("0222-data-2")#获得json详细的信息
        #data_dir=list(data_det.keys())#得到所有的键，也就是对应的数据集的名称
        data_dir=['cleveland-0_vs_4',
                 'dermatology-6',
                 'ecoli-0-4-6_vs_5',
                 #'ecoli-0-4-6_vs
                 'iris0',
                 'new-thyroid1',
                 'page-blocks-1-3_vs_4',
                 'pima',
                 'poker-9_vs_7',
                 'shuttle-6_vs_2-3',
                 'vehicle2',
                 'vowel0',
                 'winequality-red-4',
                 'wisconsin',
                 'yeast3',
                'acq_vs_cocoa',
                'acq_vs_coffee',
                'coffee_vs_cocoa',
                'grain_vs_cotton',
                'trade_vs_jobs',
                    ]
        
        data_dir=list(data_det.keys())#得到所有的键，也就是对应的数据集的名称
        for dir in data_dir:#遍历所有的数据集
            if "rang" not in data_det["{}".format(dir)]:#如果这个数据集我们没有定义rang的话，继续执行
                continue
            else:#如果有rang,遍历该数据集对应的数据编号,得到weigh，c，gam,rang
                print(dir,":",data_det["{}".format(dir)]["rang"])
                zly_c,zly_wei,zly_gamm,zly_rang=ret_dir_det(data_det,dir)#获得该数据的详细信息
                #此处打印wei,gamm,c
                print("{}改变cwg值".format(dir))
                print_cwg(zly_c, zly_wei, zly_gamm,num_run)
                zly_rang_sorted = sorted(zly_rang);
                for no in zly_rang_sorted:
    
                   #if no in [90,247,263]:
                    #   continue
                        
                    
                    
                    isexistj1()#判断j1
                    pyautogui.moveTo(num_x, num_y, duration=0.1)
                    time.sleep(0.2)
                    while not mouse(num_x, num_y):
                        time.sleep(2)
                        x_pag, y_pag = pag.position()
                        print("重新移动,鼠标移动失败:当前位置：({}, {})".format(x_pag, y_pag))
                        pyautogui.moveTo(num_x, num_y, duration=0.1)  # 移动鼠标到具体坐标，duration为所需的时间
                    pyautogui.click()
    
                    for i in range(4):  # 删除原来weight的值
                        pyautogui.press('backspace')
                    #处理no为固定长度的字符串
                    no_to_str=""
                    if no >= 1000:#4
                        no_to_str="{}".format(no)
                    elif no >= 100 and no < 1000:#3
                        no_to_str=" {}".format(no)
                    elif no >=10 and no <100:#2
                        no_to_str="  {}".format(no)
                    else:
                        no_to_str="   {}".format(no)
                    print("{}开始No.{}样本_i={}".format(dir,no_to_str,num_run))
                    pyautogui.typewrite(no_to_str)
                # 修改好num，点击开始
                # ！！！
                    
                    pyautogui.moveTo(run_x, run_y, duration=0.25)  # 移动鼠标到具体坐标，duration为所需的时间
                    pyautogui.click()
                    
                        
                    
                    #此处应该等待j1是否出现
                    j1_exist()
                    isexistj1()#判断j1
